package basic_part;

public class Main {
    public static void main(String[] args) {
        /**
         * 拆分三位数
         */
        int a = 123;
        System.out.println("个位数为" + a % 10);
        System.out.println("十位数为" + a % 100 / 10);
        System.out.println("百位数为" + a / 100);

        //逻辑异或，相同为假，不同为真
        System.out.println(true ^ false);
        System.out.println(false ^ true);
        System.out.println(true ^ true);
        System.out.println(false ^ false);

        /**
         * &&短路与：&&左边为false，右边不执行，左边为true右边才执行
         * ||短路或：||左边为true，右边不执行，左边为false右边才执行
         * & 不管左边为什么右边都执行
         * | 不管左边什么右边都执行
         */
        int c = 10, b = 20;
        System.out.println(c > 11 || b++ > 20); //左假右假，结果false（b先用20对比20，再加1）
        System.out.println(b);  //21（b++执行）
        System.out.println(c > 9 || b++ > 20);  //左真右真，结果true
        System.out.println(b);  //21（b++未执行）
        System.out.println(c > 9 | b++ > 20);   //左真右真，结果true
        System.out.println(b);  //22（b++执行）
        System.out.println(c > 11 | b++ > 20);   //左假右真，结果true
        System.out.println(b);  //23（b++执行）

        System.out.println(c > 11 && b++ > 20); //左假右真，结果false
        System.out.println(b);  //23（b++不执行）
        System.out.println(c > 9 && b++ > 20);  //左真右真，结果true
        System.out.println(b);  //24（b++执行）
        System.out.println(c > 9 & b++ > 20);   //左真右真，结果true
        System.out.println(b);  //25（b++执行）
        System.out.println(c > 11 & b++ > 20);   //左假右真，结果false
        System.out.println(b);  //26（b++执行）

        //&&优先级高于||
        System.out.println(1 > 0 || 1 > 0 && 1 < 0); //true，先执行1>0 && 1<0结果为false，但是1>0结果为true，短路或结果为true
        System.out.println((1 > 0 || 1 < 0) && 1 < 0); //false，先执行括号内的结果为false，短路与最终结果为false

    }
}